package com.budwk.app.sqfw.services;

import com.budwk.app.sqfw.dto.*;
import com.budwk.app.sqfw.models.Sqfw_formSummary;
import com.budwk.app.sqfw.vo.HouseSurveyFormPlaceVO;
import com.budwk.app.sqfw.vo.SqfwFormSummaryUnitInfoVO;
import com.budwk.app.sqfw.vo.Sqfw_formSummaryForAdminVO;
import com.budwk.starter.common.result.Result;
import com.budwk.starter.database.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * @author ZY.Wang
 * @since 2023/7/17
 */
public interface SqfwFormSummaryService extends BaseService<Sqfw_formSummary> {

    /**
     * 根据表单数据查询场所信息
     *
     * @param checkPlaceName 场所名称
     * @return 表单单位名称
     */
    List<Map> listUnitPlaceName(String unitId, String type, String checkPlaceName, String returnKey);


    /**
     * 根据场所名称获取场所详细信息
     *
     * @param unitNameStr 场所名称
     * @return 结果
     */
    SqfwFormSummaryUnitInfoVO getUnitPlaceLatestInfo(String unitNameStr, String unitId);

    /**
     * 根据场所名称获取场所详细信息
     *
     * @param unitNameStr 场所名称
     * @return 结果
     */
    SqfwFormSummaryUnitInfoVO getUnitPlaceLatestInfo(String conditionKey, String unitNameStr, String unitId);

    /**
     * 根据场所名称获取场所详细信息
     *
     * @param id 服务记录id
     * @return 结果
     */
    SqfwFormSummaryUnitInfoVO getUnitPlaceLatestInfoById(String id);

    /**
     * 根据工作流生成pdf
     *
     * @param userId              用户id
     * @param formSummaryWithFlow 工作流
     */
    void generateFireHiddenPdf(String userId, SqfwFormSummaryWithFlowDTO formSummaryWithFlow);

    /**
     * 获取上一次检查
     *
     * @param address 场所地址
     * @param name    场所名称
     * @return
     */
    Sqfw_formSummary getLastCheck(String address, String name);

    /**
     * 通过sqfw_id获取信息
     *
     * @param sqfw_id
     * @return
     */
    Sqfw_formSummary getToSqfwId(String sqfw_id, String createDate);

    /**
     * 根据工作流id重新生成pdf
     *
     * @param userId     用户id
     * @param sqfwFlowId 工作流id
     */
    void retryGenerateFireHiddenPdf(String userId, String sqfwFlowId);

    /**
     * 批量重新生成
     *
     * @param ids
     * @param isAll 如果为ture，则全部重新生成
     */
    void retryGenerateFireHiddenPdfs(List<String> ids, boolean isAll, Integer... pages);

    /**
     * 根据服务记录id生成排查Excel
     *
     * @param sqfwId 服务记录id
     * @return excel的url
     */
    String generateFireHiddenCollectionExcelForApp(String sqfwId, String workOrderId, String userId, Integer fileIndex);

    /**
     * 消防安全排查发送同行人消息
     *
     * @param dto 消息DTO
     * @return 发送条数
     */
    Integer sendFireHiddenPeersMsg(FireHiddenPeersMsgDTO dto);

    /**
     * 根据服务记录id生成pdf合集
     *
     * @param sqfwId      服务记录id
     * @param workOrderId 工单id
     * @return 结果
     */
    String generateAppointPdfConverge(String sqfwId, String workOrderId, String fileType);

    /**
     * 根据服务记录id生成指定pdf合集
     *
     * @param sqfwId      服务记录id
     * @param workOrderId 工单id
     * @param index       指定pdf的序号
     * @return 结果
     */
    String generateAppointPdfConverge(String userId, String sqfwId, String workOrderId, String fileType, int index);

    /**
     * 生成垃圾分类调查表PDF
     *
     * @param userId              用户id
     * @param formSummaryWithFlow 表单数据
     */
    void generateRefuseClassifyPdf(String userId, SqfwFormSummaryWithFlowDTO formSummaryWithFlow);

    /**
     * 生成垃圾分类Excel
     *
     * @param sqfwId 社区服务id
     * @return 结果
     */
    String generateRefuseClassifyExcelForApp(String sqfwId);

    /**
     * 重新生成垃圾分类的pdf
     *
     * @param userId     用户id
     * @param sqfwFlowId 工作流id
     */
    void retryGenerateRefuseClassifyPdf(String userId, String sqfwFlowId);

    /**
     * 根据栋号和户号查询 入户地点信息
     *
     * @param unitId 社区单位id
     * @param a5     户号
     * @param a4     栋号
     * @return 结果
     */
    List<HouseSurveyFormPlaceVO> listPlaceForHouseSurveyFrom(String unitId, String workOrderId, String userId, String a5, String a4, String a3, String a1);

    /**
     * 生成入户调查表PDF
     *
     * @param formSummaryWithFlow 表单数据
     */
    void generateHouseSurveyFormPdf(SqfwFormSummaryWithFlowDTO formSummaryWithFlow);

    /**
     * 根据服务id查询能够下载的excel种类
     *
     * @param sqfwId 社区服务id
     * @return 结果
     */
    List<String> getDownloadHouseSurveyFormExcelType(String sqfwId, String isAdmin);

    /**
     * 生成入户调查表Excel
     *
     * @param sqfwId    服务记录id
     * @param excelType excel的类型
     * @return 结果
     */
    String generateHouseSurveyFormExcelForApp(String sqfwId, String excelType);

    /**
     * 重新生成入户调查表pdf
     *
     * @param sqfwFlowId 工作流id
     */
    void retryGenerateHouseSurveyFormPdf(String userId, String sqfwFlowId);

    /**
     * 根据服务记录id需要二次调查的数据
     *
     * @param sqfwId 服务记录id
     * @return 结果
     */
    List<HouseSurveyFormPlaceVO> listSecondHouseSurvey(String sqfwId, String userId);

    /**
     * @param queryDTO 查询dto
     * @param userId   用户id
     * @return 结果
     */
    List<HouseSurveyFormPlaceVO> listSecondHouseSurveyCenPeople(HouseSurveySecondCenQueryDTO queryDTO, String userId);

    /**
     * 查询二次入户调查的特殊人员数据
     *
     * @param unitId 单位id
     * @return 结果
     */
    List<String> listGridByUnit(String unitId);

    /**
     * 生成任务pdf的集合
     *
     * @param conditionList 条件list
     * @return pdf链接
     */
    String generateServiceRecordPdfColl(List<ServiceRecordPdfOrExcelCollDTO> conditionList, Integer fileIndex);

    /**
     * 生成excel
     *
     * @param conditionList 条件list
     * @param userId        用户id
     * @param fileIndex     文件索引
     * @param excelType     文件类型
     * @return 结果
     */
    String generateServiceRecordExcelColl(List<ServiceRecordPdfOrExcelCollDTO> conditionList, String userId, Integer fileIndex, String excelType);

    void handleFormSummaryAndCenSusPaperForHouseSurveyDelete(Sqfw_formSummary item);

    /**
     * 批量删除数据
     *
     * @param formSummaryIds iD
     */
    void batchDeleteFormSummary(List<String> formSummaryIds);

    /**
     * 判断上一次整改是否已经整改完成
     *
     * @param lastCheckSummary 上一次检查情况
     * @param formSummary      本次检查情况
     */
    void popularDaYingLuStreetLastCheckSummary(Sqfw_formSummary lastCheckSummary, Sqfw_formSummary formSummary);

    /**
     * 根据上传的excelType下载相应模板
     *
     * @param sqfwId      服务ID
     * @param excelType   excel类型
     * @param fileIndex   文件key
     * @param serviceType 服务类型
     */
    String getDownloadTemplateFormExcelType(String sqfwId, Integer fileIndex, String excelType, String isWord, String serviceType, String companyName);

    /**
     * 下载模板
     *
     * @param fileIndex
     * @param isWord
     * @return
     */
    String downloadTemplateForIndex(Integer fileIndex, String isWord, String unitName);

    /**
     * app有数据的excel种类
     *
     * @param sqfwId
     * @return
     */
    List<Integer> getDownloadExcelTypeFromApp(String sqfwId);

    /**
     * 后端检查是否有数据excel
     *
     * @param conditionList 选择记录时需要传的ID值
     * @param serviceType   服务类型
     * @param companyName   公司名称（定制化街道需要传入）
     * @param bean          查询导出入口时需要传入相应参数
     * @param queryEntry    查询入口来源
     * @return
     */
    List<Integer> getDownloadExcelTypeFromAdmin(List<SqfwSummaryPdfExcelCollForAdminDTO> conditionList, String serviceType, String companyName, Sqfw_formSummaryForAdminVO bean, String queryEntry);

    List<Integer> checkParamWeiQingMenStreet(List<Sqfw_formSummary> formSummaryList);

    /**
     * 生成社会治安巡查PDF
     *
     * @param userId              用户ID
     * @param formSummaryWithFlow G工作流
     */
    void generatePublicSecurityPdf(String userId, SqfwFormSummaryWithFlowDTO formSummaryWithFlow);

    /**
     * 社会治安excel生成
     *
     * @param sqfwId      服务ID
     * @param workOrderId 工作流程
     * @param userId      当前登录人
     * @param fileIndex   文件索引
     * @return
     */
    String generatePublicSecurityExcelForApp(String sqfwId, String workOrderId, String userId, Integer fileIndex);

    /**
     * 重新生成社会治安PDF
     *
     * @param userId
     * @param sqfwFlowId
     */
    void retryGeneratePublicSecurityPdf(String userId, String sqfwFlowId);

    /**
     * 根据场所名称获取离职记录
     *
     * @param placeName
     * @return
     */
    List<Sqfw_formSummary> queryPlaceNameHistory(String placeName);

    /**
     * 根据条件检索场所名称（上级可查看下面子级信息）(接口暂时不用)
     *
     * @param unitId            单位ID
     * @param type              服务类型
     * @param checkPlaceNameStr 检索参数
     * @param returnKey         检索字段
     * @return
     */
    List<Map> queryPlaceInfoList(String unitId, String type, String checkPlaceNameStr, String returnKey);

    /**
     * 根据场所名称获取最新场所信息(上级可检索下级)(接口暂时不用)
     *
     * @param unitNameStr  检索参数
     * @param unitId
     * @param conditionKey 查询的key值
     * @return
     */
    SqfwFormSummaryUnitInfoVO getUnitPlaceLatestInfoByName(String unitNameStr, String unitId, String conditionKey, String type);

    Map<String, List<String>> getUserSignatureMap(String nameStr, String unitId);

    /**
     * 根据当前登录人获取商铺信息
     *
     * @param status
     * @return
     */
    List<Sqfw_formSummary> getStoreInfo(String status,Integer pageNo,Integer pageSize, String content);


    /**
     * 根据人员名称跟人员标识获取最新一条任务记录
     *
     * @param userName
     * @param specialMark
     * @return
     */
    List<Map> getServiceRecordFormSummaryList(String userName, String specialMark);

    /**
     * 合并文档下载
     * @param serverFileMergingDTO
     * @return
     */
    Result<?> downloadFileMerging(ServerFileMergingDTO serverFileMergingDTO);
}
